package com.pureut.storage.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pureut.storage.domain.PurchaseReceipt;
import com.pureut.storage.domain.StrategyMessage;
import com.pureut.storage.dto.*;
import com.pureut.storage.vo.GetDataByCodeVo;
import com.pureut.storage.vo.ImparityVo;
import com.pureut.storage.vo.MaterialStatListVo;
import com.pureut.storage.vo.PurchaseReceiptVo;
import com.sale.common.mybatis.core.mapper.BaseMapperPlus;
import com.sale.common.mybatis.core.page.PageQuery;
import com.sale.common.mybatis.core.page.TableDataInfo;
import com.sale.order.api.vo.PurchaseOrderTraceVo;
import com.sale.storage.api.dto.PurchaseOrderTrackDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/***
 * 采购入库mapper
 * Author:C
 * Date:2022/12/23 10:16
 * @DESC
 */
@Mapper
public interface PurchaseReceiptMapper extends BaseMapperPlus<PurchaseReceiptMapper, PurchaseReceipt, PurchaseReceipt> {

    /**
     * 获取列表
     */
    Page<PurchaseReceiptDto> getReceiptList(@Param("page") Page<PurchaseReceiptDto> page, @Param("purchaseReceiptVo") PurchaseReceiptVo purchaseReceiptVo);

    /**
     * 根据id获取详情
     */
    PurchaseReceiptDto getReceiptViewById(long id);

    /**
     * 获取列表（手持pda）
     */
    Page<AndroidPdaDto> getReceiptAndroidList(@Param("deptId") Long deptId,@Param("page") Page<AndroidPdaDto> page);

    /**
     * 根据id获取详情（手持pda）
     */
    AndroidPdaViewDto getReceiptViewAndroidById(long id);

    /**
     * 查询供应商编码
     * @param wsiConnectNum
     * @return
     */
    PrintDto getReceiptInfo(String wsiConnectNum);

    /**
     * 通过多个id获取数据
     */
    List<PurchaseReceiptExportDto> getDataByIdStr(@Param("idList") List<String> idList);

    /**
     * 获取列表(导出查询)
     */
    List<PurchaseReceiptExportDto> getReceiptListOut(PurchaseReceiptVo purchaseReceiptVo);

    /**
     * 手持pda获取拣货撤销列表
     */
    Page<AndroidPdaDto> getPurchaseReceiptCancellationList(@Param("page") Page<AndroidPdaDto> page);

    /**
     * 采购入库交接列表（手持pda使用）
     */
    Page<AndroidHandoverPdaDto> getAndroidHandoverList(@Param("page") Page<AndroidHandoverPdaDto> page);

    /**
     * 采购入库交接详情（手持pda使用）
     */
    AndroidHandoverPdaDto getAndroidHandoverView(Long id);

    /**
     * 多个列表查询数据（采购发票页面使用）
     */
    Page<ImparityDto> selectImparityList(@Param("page") Page<ImparityDto> page,@Param("imparityVo") ImparityVo imparityVo);

    /**
     * 根据供应商编码获取数据（财务-核销单使用）
     */
    Page<ImparityDto> selectDataBySupplierCode(@Param("getDataByCodeVo") GetDataByCodeVo getDataByCodeVo, @Param("page") Page<ImparityDto> page);

    /**
     * 采购订单跟踪查询
     * @return PurchaseOrderTrackDto
     */
    List<PurchaseOrderTrackDto> getPurchaseOrderTrackList(@Param("purchaseOrderTraceVo") PurchaseOrderTraceVo purchaseOrderTraceVo);

    /**
     * 采购统计 - 采购汇总表物料统计（物料统计）
     * @param materialStatListVo
     * @return
     */
    List<MaterialStatListDto> getMaterialStatList(@Param("materialStatListVo") MaterialStatListVo materialStatListVo);

    /**
     * 采购统计 - 采购汇总表物料统计(供应商统计)
     * @param materialStatListVo
     * @return
     */
    List<MaterialStatListDto> getMaterialStatSupplierList(@Param("materialStatListVo") MaterialStatListVo materialStatListVo);

    /**
     * 财务-核销单 通过获取未全部核销的采购入库单
     */
    List<ImparityDto> getNoVerificationList(@Param("getDataByCodeVo") GetDataByCodeVo getDataByCodeVo);

    /**
     * 查询仓库单据数据（结账反结账使用）
     */
    List<PurchaseReceiptDto> getRClosingDocument(String time);


    /**
     * 根据物料编码获取采购入库及完工入库已完成、已关节状态单据信息
     */
    List<PrintDocumentDto> getPurchaseReceiptMessage(String materialCode);
}
